#include <iostream>
using namespace std;

/*
    继承的语法规则：
        class 子类 : public 父类 {}          //子类公有继承父类
        class 子类 : private 父类 {}         //子类私有继承父类
        class 子类 : protected 父类 {}       //子类保护继承父类
        默认是是私有继承
    继承的作用：
        子类继承父类，子类对象可以在外部使用父类的所有公有成员
        提高代码的复用性
    权限继承：
        在外部：
        public继承：子类对象可以访问父类公有成员，不可以访问父类私有成员和保护成员
        private继承：子类对象不可以访问父类公有成员和私有成员和保护成员
        protected继承：子类对象不可以访问父类公有成员和私有成员和保护成员
        在内部：
        子类对象可以访问父类公有成员和保护成员，不可以访问父类私有成员
*/

class Animal
{
public:
    void eat()
    {
        cout << "吃吃吃" << endl;
    }
    int age;

private:
    void run()
    {
        cout << "跑跑跑" << endl;
    }
    int weight;

protected:
    void sleep()
    {
        cout << "睡睡睡" << endl;
    }
    int height;
};

class Cat : public Animal
{
public:

    void catEat()
    {
        eat();
        cout << "喵喵喵" << endl;
    }
    void catSleep()
    {
        sleep();
        cout << "喵喵喵" << endl;
    }
    // void catRun()
    // {
    //     run();
    //     cout << "喵喵喵" << endl;
    // }
};

int main()
{

    Cat c1;
    c1.eat();
    // c1.run();
    // c1.sleep();
    c1.catEat();
    c1.catSleep();
    return 0;
}